home *** CD-ROM | disk | FTP | other *** search
-
- #import <stdlib.h>
- #import <math.h>
- #import <appkit/Application.h>
- #import <appkit/Slider.h>
- #import <appkit/Button.h>
- #import <appkit/NXImage.h>
- #import <dpsclient/wraps.h>
- #import "QixView.h"
-
- /**********************************************************************/
-
- #define LEFT ( 100 )
- #define RIGHT ( 101 )
- #define UP ( 102 )
- #define DOWN ( 103 )
-
- #define INITLEN ( 55 ) // Initial qix tail length.
-
- #define A_BASE_INC ( 5 ) // Default distance to move the
- // "A" point of a qix structure.
- #define B_BASE_INC ( 8 ) // Default distance to move the
- // "B" point of a qix structure.
-
- /**********************************************************************/
-
-
- @implementation QixView
-
- /**********************************************************************/
-
- - newWindow
- {
- [ self resetQix : &head : NO ];
- [ self resetQix : &tail : YES ];
-
- return self;
- }
-
- /**********************************************************************/
-
- - (const char *) windowTitle
- {
- return ( const char * ) "Qix Lines";
- }
-
- /**********************************************************************/
-
- - initFrame : ( const NXRect * ) frameRect
- {
- [ super initFrame : frameRect ];
-
- [ self setOpaque : YES ];
- [ self setClipping : NO ];
-
- [ self resetQix : &head : NO ];
- [ self resetQix : &tail : YES ];
-
- return self;
- }
-
- /**********************************************************************/
-
- - sizeTo : ( NXCoord ) width : ( NXCoord ) height
- {
- [ super sizeTo : width : height ];
-
- [ self resetQix : &head : NO ];
- [ self resetQix : &tail : YES ];
-
- return self;
- }
-
- /**********************************************************************/
-
- - resetQix : ( QIX * ) qix : ( BOOL ) resetControls
- {
- if( resetControls == YES )
- tailLen = INITLEN;
-
- qix->pointA.x = bounds.size.width / 3.0;
- qix->pointA.y = bounds.size.height / 3.0;
- qix->pointA.x_dir = RIGHT;
- qix->pointA.y_dir = DOWN;
- qix->pointA.x_inc = A_BASE_INC;
- qix->pointA.y_inc = A_BASE_INC;
- qix->pointA.orig_inc = A_BASE_INC;
-
- qix->pointB.x = bounds.size.width / 2.0;
- qix->pointB.y = bounds.size.height / 2.0;
- qix->pointB.x_dir = LEFT;
- qix->pointB.y_dir = UP;
- qix->pointB.x_inc = B_BASE_INC;
- qix->pointB.y_inc = B_BASE_INC;
- qix->pointB.orig_inc = B_BASE_INC;
-
- return self;
- }
-
- /**********************************************************************/
-
- - setQixPoint : ( MVPOINT * ) point
- {
- if( point->x >= bounds.size.width )
- {
- point->x_dir = LEFT;
- point->x_inc = point->orig_inc;
- }
- else if( point->x <= 0 )
- point->x_dir = RIGHT;
-
- if( point->x_dir == RIGHT )
- {
- point->x += point->x_inc;
- point->x_inc -= .009;
- }
- else
- {
- point->x -= point->x_inc;
- point->x_inc += .03;
- }
-
- if( point->y >= bounds.size.height )
- {
- point->y_dir = DOWN;
- point->y_inc = point->orig_inc;
- }
- else if( point->y <= 0 )
- point->y_dir = UP;
-
- if( point->y_dir == UP )
- {
- point->y += point->y_inc;
- point->y_inc -= .009;
- }
- else
- {
- point->y -= point->y_inc;
- point->y_inc += .06;
- }
-
- return self;
- }
-
- /**********************************************************************/
-
- - drawQix : ( QIX ) qix
- {
- PSsetlinewidth( 0.5 );
-
- PSmoveto( qix.pointA.x, qix.pointA.y );
- PSlineto( qix.pointB.x, qix.pointB.y );
- PSstroke( );
-
- return self;
- }
-
- /**********************************************************************/
-
- - oneStep
- {
- if( tailLen )
- --tailLen;
- else
- {
- PSsetgray( NX_BLACK );
- [ self drawQix : tail ];
- [ self setQixPoint : &tail.pointA ];
- [ self setQixPoint : &tail.pointB ];
- }
-
- PSsetgray( NX_WHITE );
- [ self drawQix : head ];
- [ self setQixPoint : &head.pointA ];
- [ self setQixPoint : &head.pointB ];
-
- return self;
- }
-
- /**********************************************************************/
-
- - drawSelf : ( NXRect * ) r : ( int ) count
- {
- if (!r || !count)
- return self;
-
- PSsetgray( NX_BLACK );
-
- NXRectFill( r );
-
- return self;
-
- }
-
- /**********************************************************************/
-
- @end
-